import { defineStore } from 'pinia'
import {ref,watch} from "vue";

function initState() {
    return{
        isCollapse:false,
        tags:  [
            {
                path:"/home",
                name:"home",
                label:"首页",
                icon:"home",
            }
        ],
        currentMenu:null,
        menuList:[],
        token:"",
        routerList:[],
    }
}
export const useAllDataStore = defineStore('allData', () => {
    const state=ref(initState());

    watch(state,(newobj)=>{
        if (!newobj.token) return;
        localStorage.setItem("store",JSON.stringify(newobj));
    },{deep:true})
    function selectMenu(val) {
        if (val.name==="home"){
            state.value.currentMenu=null;
        }else {
            state.value.currentMenu=val;
            let index=state.value.tags.findIndex((item)=>item.name===val.name);
            index=== -1 ? state.value.tags.push(val) : "";
        }
    }
    function undateMenu(tag) {
        let index=state.value.tags.findIndex((item)=>item.name===tag.name);
        state.value.tags.splice(index,1)
    }
    function undateMenuList(val) {
        state.value.menuList=val
    }
    function addMenu(router,type) {
        if (type==="refresh"){
            if (JSON.parse(localStorage.getItem("store"))){
                state.value=JSON.parse(localStorage.getItem("store"))
                //
                state.value.routerList=[];
            }else {return}
        }

        const menu=state.value.menuList
        const moudle=import.meta.glob("../views/**/*.vue")
        const routeArr=[]
        menu.forEach(item=>{
            if (item.children){
                item.children.forEach(val=>{
                    let url=`../views/${val.url}.vue`
                    val.component=moudle[url]
                    routeArr.push(...item.children)
                });
            }else {
                let url=`../views/${item.url}.vue`
                item.component=moudle[url]
                routeArr.push(item)
            }
        });

        let routers=router.getRoutes()
        routers.forEach(item=>{
            if (item.name=="main"||item.name=="login"||item.name=="404"){
                return
            }else {
                router.removeRoute(item.name)
            }
        })
        routeArr.forEach(item=>{
            state.value.routerList.push(router.addRoute("main",item))
        });
    }
    function clean() {
        state.value.routerList.forEach(item=>{
            if (item) item();
        });
        state.value=initState();
    //     删除本地缓存
        localStorage.removeItem('store');
    }
    return { state,selectMenu,undateMenu,undateMenuList,addMenu,clean}
})